#include "coursemessage.h"
#include "ui_coursemessage.h"


//注意：数据库那边不要设主键，因为主键无法用qt程序修改。
//不要两条课程信息一模一样，否则你删一条信息，另一条也自动删了，你修改一条信息，另一条也自动修改了。

CourseMessage::CourseMessage(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::CourseMessage)
{
    ui->setupUi(this);
    setWindowFlags(Qt::Widget);//使dialog项目有最大最小化按钮
    model = new QSqlTableModel(this);//QObject *parent,当指定了“父窗口”之后，该窗口的析构就由父窗口来接管，Qt会保证在合适的时候析构该窗口，并且只析构一次。
    model->setTable("chooseCourse");//指定使用哪个表
    //把model放在view
    this->ui->tableView->setModel(model);
    //列宽随窗口大小改变而改变，每列平均分配，充满整个表，但是此时列宽不能拖动进行改变
    ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
    //显示model里的数据
    model->select();
    //设置model的编辑模式，手动提交修改
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);
    this->ui->listWidget->addItem(QString("欢迎增删改查课程信息。\n\n双击需要修改的地方即可修改。\n\n点击增加按钮可增加一空白行让您填充。\n\n点击信息选中一行，\n再点击删除按钮即可删除。\n通过Ctrl健可一次删除多行。\n\n请不要忘记保存您修改的信息。"));
    //这句话，使该窗口close（）后自动销毁
    setAttribute(Qt::WA_DeleteOnClose, true);
    //一次选中一行，删除不用再点行头才能删
    ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);

    //把右下角课程查询设成可以模糊搜索
    QStringList wordList;
    wordList<<"计算机科学导论"<<"高级语言程序设计"<<"概率论"<<"面向对象程序设计"
           <<"离散结构"<<"数据结构"<<"高等数学1"<<"高等数学2"<<"大学数学"
          <<"应用文写作"<<"近现代史纲要"<<"军事理论"<<"数字电路与逻辑设计"
         <<"软件工程"<<"操作系统"<<"计算智能"<<"思想修养与法律基础"
        <<"大学物理"<<"大学语文"<<"大学英语1"<<"大学英语2"<<"大学英语3"
       <<"大学英语4"<<"植物学"<<"A系列"<<"C语言程序设计"<<"无机化学";
    QCompleter *completer = new QCompleter(wordList, this);
    ui->lineEdit->setCompleter(completer);
}

CourseMessage::~CourseMessage()
{
    delete ui;
}

//这个函数目前没用到
void CourseMessage::SetWidth()
{
    //设置列宽
    this->ui->tableView->setColumnWidth(0,100);
    this->ui->tableView->setColumnWidth(1,150);
    this->ui->tableView->setColumnWidth(2,100);
    this->ui->tableView->setColumnWidth(3,80);
    this->ui->tableView->setColumnWidth(4,80);
    this->ui->tableView->setColumnWidth(5,80);
}

void CourseMessage::on_query_clicked()
{
    int index=this->ui->comboBox->currentIndex();
    QString lineEdit=this->ui->lineEdit->text();
    switch(index)
    {
        case 0:
            QMessageBox::information(NULL, "提示", "请选择查询方式！", QMessageBox::Ok);
            break;
        case 1:
            model->setFilter(QString("课程编号='%1'").arg(lineEdit));
            model->select();
            break;
        case 2:
            model->setFilter(QString("课程名称='%1'").arg(lineEdit));
            model->select();
            break;
    }
}

void CourseMessage::on_add_clicked()
{
    //添加空记录
    QSqlRecord record = model->record(); //获取空记录
    //获取行号
    int row = model->rowCount();
    model->insertRecord(row, record);
}

void CourseMessage::on_delete_2_clicked()
{
    //int curRow = ui->tableView->currentIndex().row();
    //model->removeRow(curRow);

    //获取选中的模型
    QItemSelectionModel *sModel =ui->tableView->selectionModel();
    //取出模型中的索引  //选中了几行，就有几个索引
    QModelIndexList list = sModel->selectedRows();
    //删除所有选中的行
    for(int i = 0; i < list.size(); i++)//list.size()得到索引数目
    {
        model->removeRow(list.at(i).row());//list.at(i)即第i个索引，row()得到这个索引中的行号
    }
}

void CourseMessage::on_revert_clicked()
{
    model->setTable("chooseCourse");//指定使用哪个表
    model->select();//显示model里的数据
    //上方有model的这两句相当于sql的select * from chooseCourse

    this->ui->listWidget->clear();
    this->ui->listWidget->addItem(QString("欢迎查询课程信息。\n\n双击需要修改的地方即可修改。\n\n点击增加按钮可增加一空白行让您填充。\n\n点击每行信息左侧标号选中一行，\n再点击删除按钮即可删除。\n通过Ctrl健可一次删除多行。\n\n请不要忘记保存您修改的信息。"));
}

void CourseMessage::on_conserve_clicked()
{
    model->submitAll(); //提交动作
    model->select();
}

void CourseMessage::on_tableView_clicked(QModelIndex index)
{
    this->ui->listWidget->clear();
    QSqlRecord record = model->record(index.row());
    QString courseId = record.value("课程编号").toString();
    QString name =record.value("课程名称").toString();
    QString id = record.value("修读学生的学号").toString();
    QString score =record.value("考试成绩").toString();
    QString credit = record.value("课程学分").toString();
    QString rebuild = record.value("是否重修").toString();
    ui->listWidget->addItem(QString("课程编号:%1\n课程名称:%2\n修读学生的学号:%3\n考试成绩:%4\n课程学分:%5\n是否重修:%6\n").arg(courseId).arg(name).arg(id).arg(score).arg(credit).arg(rebuild));
}
